package utils

//
//import (
//	"sort"
//	"sync"
//)
//
//type MySet struct {
//	sync.RWMutex
//	m map[string]bool
//}
//
//// 新建集合对象
//func NewMySet(items ...string) *MySet {
//	s := &MySet{
//		m: make(map[string]bool, len(items)),
//	}
//	s.Add(items...)
//	return s
//}
//
//// 添加元素
//func (s *MySet) Add(items ...string) {
//	s.Lock()
//	defer s.Unlock()
//	for _, v := range items {
//		s.m[v] = true
//	}
//}
//
//// 删除元素
//func (s *MySet) Remove(items ...string) {
//	s.Lock()
//	defer s.Unlock()
//	for _, v := range items {
//		delete(s.m, v)
//	}
//}
//
//// 判断元素是否存在
//func (s *MySet) Has(items ...string) bool {
//	s.RLock()
//	defer s.RUnlock()
//	for _, v := range items {
//		if _, ok := s.m[v]; !ok {
//			return false
//		}
//	}
//	return true
//}
//
//// 元素个数
//func (s *MySet) Count() int {
//	return len(s.m)
//}
//
//// 清空集合
//func (s *MySet) Clear() {
//	s.Lock()
//	defer s.Unlock()
//	s.m = map[string]bool{}
//}
//
//// 空集合判断
//func (s *MySet) Empty() bool {
//	return len(s.m) == 0
//}
//
//// 无序列表
//func (s *MySet) List() []string {
//	s.RLock()
//	defer s.RUnlock()
//	list := make([]string, 0, len(s.m))
//	for item := range s.m {
//		list = append(list, item)
//	}
//	return list
//}
//
//// 排序列表
//func (s *MySet) SortList() []string {
//	s.RLock()
//	defer s.RUnlock()
//	list := make([]string, 0, len(s.m))
//	for item := range s.m {
//		list = append(list, item)
//	}
//	sort.Strings(list)
//	return list
//}
//
//// 并集
//func (s *MySet) Union(MySets ...*MySet) *MySet {
//	r := NewMySet(s.List()...)
//	for _, MySet := range MySets {
//		for e := range MySet.m {
//			r.m[e] = true
//		}
//	}
//	return r
//}
//
//// 差集
//func (s *MySet) Minus(MySets ...*MySet) *MySet {
//	r := NewMySet(s.List()...)
//	for _, MySet := range MySets {
//		for e := range MySet.m {
//			if _, ok := s.m[e]; ok {
//				delete(r.m, e)
//			}
//		}
//	}
//	return r
//}
//
//// 交集
//func (s *MySet) Intersect(MySets ...*MySet) *MySet {
//	r := NewMySet(s.List()...)
//	for _, MySet := range MySets {
//		for e := range s.m {
//			if _, ok := MySet.m[e]; !ok {
//				delete(r.m, e)
//			}
//		}
//	}
//	return r
//}
//
//// 补集
//func (s *MySet) Complement(full *MySet) *MySet {
//	r := NewMySet()
//	for e := range full.m {
//		if _, ok := s.m[e]; !ok {
//			r.Add(e)
//		}
//	}
//	return r
//}
